x86: fix next->vcpu_dirty_cpumask checking in context_switch()
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 20 Apr 2009 13:56:31 +0000 (14:56 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 20 Apr 2009 13:56:31 +0000 (14:56 +0100)
commit5aa2a526e22772446e1d182c487aa6ebcff11660
treeb7b0e52d1f80282af29928f27faaa0331521c559
parentc6c343f8884bf914f94bfb82878374627820b275
x86: fix next->vcpu_dirty_cpumask checking in context_switch()

There was a timing window where flush_tlb_mask() could be called with
an empty mask (triggering a WARN_ON() in send_IPI_mask_flat() along
with APIC errors) because rather than using the already taken snapshot
of next's vcpu_dirty_cpumask struct vcpu's field was used directly,
which can get its only bit cleared by remote CPUs.

Replacing the structure field's use by the local variable then made
the inner cpus_empty() check completely redundant with the one in the
surrounding if()'s condition.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
xen/arch/x86/domain.c